#include <stdio.h>
#include <stdlib.h>
#include <string.h>
	
struct player {
	int id;
	char name[];
};
	
int main () {
    // 柔性数组，结构中的最后一个元素为可变长数组，定义为[]或[0]
    // 只作为标识占位符，在sizeof()统计长度时不被计算其中
    // 含有柔性数组的结构，只能在堆上生成
    //
    // 相比在结构中放指针，柔性数组与原结构存储在同一块内存
    // 方便管理，可以直接拷贝整个结构。
    //
    // 柔性数组，通常用于网络传输。
	struct player *p = malloc(sizeof(*p) + sizeof(char) * 16);
	printf("%ld ", sizeof(*p));
	strcpy(p->name, "zhou");
    printf("%s\n", p->name);
	return 0;
}
